<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
<script>

(async function (){
    console.log( 1 );

    // await后面如果不是Promise对象，则直接返回后面的值
    let res1 = await 1+1;
    console.log( res1 );

    // 如果await后面是Promise对象，它可以等待到其resolve的结果
    let res2 = await new Promise((resolve,reject)=>{
        console.log( 3 );
        setTimeout(()=>{
            console.log( 4 );
            resolve(5);
        },400);
    });
    console.log( res2 );

    // 如果await后面是Promise对象，该Promise对象为失败状态时，等待不到失败的结果，并且会报错，如果未处理错误async执行结束
    /* let res3 = await new Promise((resolve,reject)=>{
        console.log( 6 );
        setTimeout(()=>{
            console.log( 7 );
            reject(8);
        },400);
    })
    .catch((res)=>{
        console.log( '失败',res );
    }); */

    // 或者：
    try{
        var res3 = await new Promise((resolve,reject)=>{
            console.log( 6 );
            setTimeout(()=>{
                console.log( 7 );
                reject(8);
            },400);
        })
    }catch(e){
        console.log( e );
    }

    console.log( res3 );// undefined
    console.log( 9 );// 9
})();


// console.log( '程序 1' );
// console.lag( '程序 2' );// 报错，导致后面 程序3也不执行
// console.log( '程序 3' );


/* // try/catch语句，用于处理错误
console.log( '程序 1' );
try{// 可能出错的程序放在try里面尝试执行
    console.lag( '程序 2' );
} catch(err){// 捕获到错误时，执行catch
    console.log( '出错了',err );
}
console.log( '程序 3' );
 */
</script>
</body>
</html>